package com.company.lagou.homework;

import java.util.Scanner;

public class Chess2 {




    public static void main(String[] args) {
            Scanner in = new Scanner(System.in );
            int row= 16;
            int col= 16;
            //int hor=0,ver=0,sla1=0,sla2=0;

            //生成五子棋盘
            int [][]chess = new int[row+1][col+1];

            //给第一行填字

            for (int i = 1; i < chess[0].length; i++) {
                    chess[0][i] = i;
                }

            //给第一列填字
            for (int i = 1; i < chess[0].length; i++) {
                chess[i][0]=i;
            }
            //int m,n;
            //boolean flag=true;//true 表示黑方下    false表示白方下
            //显示棋盘
            for (int i = 0; i < chess.length; i++) {
                for (int j = 0; j < chess[i].length; j++) {
                    if(i == 0){
                            System.out.print(chess[i][j]+ " ");
                        } else if(j == 0) {
                        System.out.print(chess[i][j] + " ");
                    } else {
                        System.out.print("+ ");
                    }
                }
                System.out.println();
            }

            int m,n;
            boolean flag=true;//true 表示黑方下    false表示白方下

            for(;;){
                //1.先提示下棋
                if (flag){
                    System.out.print("黑方下棋：");
                    m=in.nextInt();
                    n=in.nextInt();
                    chess[m][n]=1;
                }
                else{
                    System.out.println("白方下棋：");
                    m=in.nextInt();
                    n=in.nextInt();
                    chess[m][n]=2;
                }
                //再次显示棋盘，观察刚才下棋的状态
                for (int i = 0; i < chess.length; i++) {
                    for (int j = 0; j < chess[i].length; j++) {
                        System.out.print(chess[i][j]+ " ");
                    }
                    System.out.println();
                }




                //3.五子棋下棋以后的逻辑判断   胜出  继续提示白方下棋：
                if (flag){
                    //表示黑方（1）下的棋
                    //黑方是否胜利的逻辑判断代码
                    if (judge(chess,m,n,1)){
                        System.out.println("黑方胜利");

                    }

                    //该白方下棋了
                    flag=false;
                }
                else{
                    if (judge(chess,m,n,2)){
                        System.out.println("白方胜利");
                    }
                    //表示黑方（1）下的棋
                    //黑方是否胜利的逻辑判断代码
                    //该白方下棋了
                    flag=true;

                }

            }
        }

        private static boolean judge(int[][] chess, int m, int n, int data) {
            int count = 1;
            int j = 0;
            // 先判断横向的左边
            //   ...   [m,n-1] [m,n] [m,n+1]
            for(j=n-1; j>0; --j){
                if(chess[m][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 再判断横向的右边
            for(j=n+1; j<chess[0].length; ++j){
                if(chess[m][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断count
            if(count == 5){
                System.exit(0);
            }

            // 给count要重置一下
            count = 1;
            // 判断竖方向
            int i=0;
            // 判断当前棋子的上方向
            for(i=m-1; i>0; --i){
                if(chess[i][n] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断当前棋子的下方向
            for(i=m+1; i<chess.length; ++i){
                if(chess[i][n] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断count
            if(count == 5){
                System.exit(0);
            }
            // count需要重置一下
            count = 1;
            // 判断左斜上方向
            for(i=m-1, j=n+1; i>0 && j<chess[0].length; --i, ++j){
                if(chess[i][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断左斜下方向
            for(i=m+1, j=n-1; i<chess.length && j>0; ++i, --j){
                if(chess[i][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断count
            if(count == 5){
                System.exit(0);
            }
            // count需要重置一下
            count = 1;
            // 判断右斜上方向
            for(i=m-1, j=n-1; i>0 && j>0; --i, --j){
                if(chess[i][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断右斜下方向
            for(i=m+1, j=n+1; i<chess.length && j<chess[0].length; ++i, ++j){
                if(chess[i][j] == data){
                    count++;
                } else {
                    break;
                }
            }
            // 判断count
            if(count == 5){
                System.exit(0);
            }
            // 上面检查了各个方向，都没有胜利，直接返回false，表示还又有赢棋
            return false;

        }
    }